//
//  CZTabBar.swift
//  weibo
//
//  Created by Apple on 16/3/8.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit
//
////  使用代理回调数据, 需要继承NSObjectProtocol,要不然不能使用weak关键字修饰定义的代理属性
//protocol CZTabBarDelegate: NSObjectProtocol {
//    //  点击按钮的回调的方法
//    func composeButtonCallBack()
//}

//  自定义TabBar
class CZTabBar: UITabBar {

    override init(frame: CGRect) {
        super.init(frame: frame)

        setUpUI()
    }

    //  必须要重写这个方法，原因是如果别人使用你这个控件的时候用xib或者stroyboard加载的话会调用下面的方法
    required init?(coder aDecoder: NSCoder) {
//        fatalError("init(coder:) has not been implemented")
        //  如果想要支持xib，需要写上以下代码
        super.init(coder: aDecoder)
        setUpUI()
        
    }
    
    // MARK:    测试代理时间回调的功能,代理如果前面不使用weak,则产生了循环引用，mainvc 强引用了tabbar，tabbar 强引用了 mainvc
//    weak var tabBarDelegate: CZTabBarDelegate?
    
    // MARK:    定义回调的闭包
    var composeButtonClosure: (()->())?
    
    // MARK:    懒加载属性
    private lazy var composeButton: UIButton = {
        let button = UIButton()
        //  添加点击事件
        button.addTarget(self, action: "composeButtonClick", forControlEvents: .TouchUpInside)
        //  设置背景
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState:.Normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState:.Highlighted)
        //  设置图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
    
        //  设置按钮大小和图片大小一样
        button.sizeToFit()
        return button
    }()
    // MARK:    设置UI
    private func setUpUI() {
        //  添加加号按钮
        addSubview(composeButton)
        //  设置tabbar的背景图片，防止阴影
        backgroundImage = UIImage(named: "tabbar_background")
    }
    
    // MARK:    调用系统方法
    //  调整tabbar子控件的位置
    override func layoutSubviews() {
        super.layoutSubviews()
        //  设置button居中,中心点的计算x = tabbar的宽度*0.5, y = tabbar的高度*0.5,因为button是tabbar的子控件
        composeButton.center = CGPoint(x: frame.width * 0.5, y: frame.height * 0.5)
        //  每个子控件的宽度
        let childViewW = frame.width / 5
        //  遍历的子控件的索引
        var i = 0
        //  遍历子控件
        for childView in subviews {
//            print(childView)
            //  UITabBarButton 是私有的
//            if childView.isKindOfClass(UITabBarButton.self)
            //  NSClassFromString 进行转换，使用'!' 我确定可以解包
            if childView.isKindOfClass(NSClassFromString("UITabBarButton")!) {

                //  设置UITabBarButton的x坐标
                childView.frame.origin.x = CGFloat(i) * childViewW
                //  设置UITabBarButton的宽度
                childView.frame.size.width = childViewW
                //  设置UITabBarButton的宽度
                i++
                //  如果是第二个索引，下一个按钮要多加加隔过去自己定义的button
                if i == 2 {
                    i++
                }
                
            }
            
        }
        
    }
    // MARK:    添加事件
    @objc private func composeButtonClick() {
        //  测试代理
//        tabBarDelegate?.composeButtonCallBack()
        //  执行闭包回调
        composeButtonClosure?()
        
    }

}
